<?php
class Weixin extends Oauth
{
	/**
	 * 获取requestCode的api接口
	 * @var string
	 */
	protected $GetRequestCodeURL = 'https://open.weixin.qq.com/connect/qrconnect';
	
	
	/**
	 * 获取requestCode的api接口2(手机网站)
	 * @var string
	 */
	protected $GetRequestCodeURL2 = 'https://open.weixin.qq.com/connect/oauth2/authorize';
	
	/**
	 * 获取access_token的api接口
	 * @var string
	 */
	protected $GetAccessTokenURL = 'https://api.weixin.qq.com/sns/oauth2/access_token';
	
	/**
	 * API根路径
	 * @var string
	 */
	protected $ApiBase = 'https://api.weixin.qq.com/';
	
	//扫码登录用的
	public function getRequestCodeURL()
	{
		//$this->config();
		$params = array(
				'appid' => $this->AppKey,          
				'redirect_uri'=>$this->Callback.'&appname='.strtolower(APP_NAME).'&host='.$_SERVER['HTTP_HOST'].(My::is_https() ? '&https=1' : ''),
				'response_type'=>'code',
				'scope'=>'snsapi_login'
		);
		return $this->GetRequestCodeURL . '?' . http_build_query($params);
	}
	
	
	//微信app登录用的
	public function getRequestCodeURL2()
	{
	    $params = array(
	        'appid' => $this->AppKey,
	        'redirect_uri'=>$this->Callback.'&appname='.strtolower(APP_NAME).'&host='.$_SERVER['HTTP_HOST'].(My::is_https() ? '&https=1' : ''),
	        'response_type'=>'code',
	        'scope'=>'snsapi_login',//开放平台的帐号用'snsapi_login'，公众号用'snsapi_userinfo'或'snsapi_base',
	        'state'=>'1'
	    );
	    return $this->GetRequestCodeURL2 . '?' . http_build_query($params);
	}
	
	/**
	 * 获取access_token
	 * @param string $code 上一步请求到的code
	 */
	public function getAccessToken($code, $extend = null){
		//$this->config();
		$params = array(
				'appid'     => $this->AppKey,
				'secret'    => $this->AppSecret,
				'grant_type'    => $this->GrantType,
				'code'          => $code,
		);
		$data = $this->http($this->GetAccessTokenURL, $params, 'POST');
		$this->Token = $this->parseToken($data, $extend);
		return $this->Token;
	}
	
	/**
	 * 组装接口调用参数 并调用接口
	 * @param  string $api    微博API
	 * @param  string $param  调用API的额外参数
	 * @param  string $method HTTP请求方法 默认为GET
	 * @return json
	 */
	public function call($api, $param = '', $method = 'GET', $multi = false){
		/* 腾讯微博调用公共参数 */
		$params = array(
			'access_token'       => $this->Token['access_token'],
			'openid'             => $this->openid(),
		);
		$vars = $this->param($params, $param);
		$data = $this->http($this->url($api), $vars, $method, array(), $multi);
		return json_decode($data, true);
	}
	
	
	/**
	 * 解析access_token方法请求后的返回值
	 */
	protected function parseToken($result, $extend)
	{
		$data = json_decode($result,true);
		//parse_str($result, $data);
		if(isset($data['access_token']) && $data['access_token'] && $data['expires_in']){
			$this->Token    = $data;
			$data['openid'] = $this->openid();
			return $data;
		} else
			throw new Exception("获取微信 ACCESS_TOKEN 出错：{$result}");
	}
	
	/**
	 * 获取当前授权应用的openid
	 */
	public function openid()
	{
		$data = $this->Token;
		if(!empty($data['openid']))
			return $data['openid'];
		else
			exit('没有获取到微信用户ID！');
	}
}
?>